<?php
/**
 * View_Base
 *
 * Базовый класс шаблонов отображения
 *
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
abstract class View_Base {

  public function __construct() {
    Service_Debug::setDebug();
	}


	/**
	 * Метод отображает список элементов переданного массива
	 *
	 * @param array $arrList - массив элементов для отображения в списке
	 * @param string $divId - идентификатор блока, обрамляющего список. Если === null, то обрамляющего дива вообще не будет
	 * @param bool $isTable - флаг, выводить ли таблицей 
	 */
	public function showList(array $arrList, $blockId = null, $isTable = false) {
		Service_Debug::setDebug();
		if ($blockId !== null) {
			if ($isTable) echo '<table cellspacing="0"' . ($blockId ? ' id="' . $blockId . '"' : null) . '>';
			else echo '<div' . ($blockId ? ' id="' . $blockId . '"' : null) . '>';
		}
	  if (!$arrList) $this->showEmptyListMessage();
	  else {
	    foreach ($arrList as $arrElement) {
	    	$this->showOneInList($arrElement);
	    }
	  }
	  if ($blockId !== null) {
	  	if ($isTable) echo '</table>'; 
	  	else echo '</div>'; 
	  }
	}

	/**
	 * Метод отображает дерево элементов переданного массива
	 *
	 * @param array $arrList - массив элементов для отображения в дереве
	 */
	public function showTree(array $arrTreeList) {
		Service_Debug::setDebug();
	  if (!$arrTreeList) $this->showEmptyListMessage();
	  else $this->showTreeBranch($arrTreeList);
	}


	/**
	 * Метод выводит сообщение о том, что список пуст
	 *
	 */
	public function showEmptyListMessage() {
	  //echo '<div class="emptyListMessage">Список пуст</div>';
	}

  /**
   * Метод выводит элемент в списке элементов
   *
   * @param mixed $element - элемент для отображения в списке. Типично является ассоциативным массивом
   */
	public function showOneInList($element){}

	/**
	 * Метод отображает ветку дерева переданного массива
	 *
	 * @param array $arrList - массив элементов для отображения в дереве
	 */
	public function showTreeBranch(array $arrList){}
	
	/**
	 * Возвращает url с подставленной частью, определяющей язык (rus/eng)
	 * 
	 * @param string $url - url без учета языка
	 */
	public static function getLanguageUrl($url, $needFullUrl = false, $opposite = false, $urlLang = null) {
		if (!$urlLang) $urlLang = Service_Translate::getLangForUrl();
		$startPath = $needFullUrl ? W_FULLPATH : ($opposite ? W_ABSPATH : W_NONE_HTTPS_PATH);
		if (($urlLang == 'rus' && !$opposite) || ($urlLang == 'eng' && $opposite)) {
			if (strpos($url, $startPath . 'hotels/') === 0/* || strpos($url, $startPath . 'hotels.htm') === 0*/) { 
				return preg_replace("|" . $startPath . "|", $startPath . 'rus/', $url, 1);
			}			  
			else return $url;
		}
		else {
			return preg_replace("|" . $startPath . "|", $startPath . 'eng/', $url, 1);
		}
	}
	
	/**
	 * Выводит таблицу содержащую в себе инфу массива 
	 * @param array $arrFields
	 * @param array $arrFieldsToShow
	 */
	public function showTableByArray($arrFields, $arrFieldsToShow) {
		Service_Debug::setDebug();
		if (!$arrFields) return false;
		echo '<table>';
		if (!$arrFieldsToShow) {
			foreach ($arrFields as $key => $value) {
				echo '<tr><td class="left">' . $key . '</td><td class="right">' . $value . '</td></tr>';
			}
		}
		else {
		  foreach ($arrFieldsToShow as $rowName => $fieldName) {
				echo '<tr>';
				  echo '<td class="left">' . $rowName . '</td>';
				  
				  echo '<td class="right">';
				    if (is_array($fieldName)) {
				    	foreach ($fieldName as $oneFieldName) {
				    		echo $arrFields[$oneFieldName] . ' ';
				    	}
				    }
				    else echo $arrFields[$fieldName];
				  echo '</td>';
				echo '</tr>';
			}
		}
		echo '</table>';
	}
	
	public function showHeader($headerText, $headerSize = 2) {
		Service_Debug::setDebug();
		echo '<h' . $headerSize . '>' . $headerText . '</h' . $headerSize . '>';
	}
	
	public function getNavigation($pattern,$pageNumber,$pagesNumber) {
		$allowpages = 3; // Количество страниц отборажаемых в навигации.
		echo '<div id="navigation">';
			if ($pageNumber > $allowpages) {
				if($pageNumber % $allowpages == 0) $firstPage = $pageNumber - $allowpages + 1;
				else $firstPage = $pageNumber - $pageNumber % $allowpages +1;
			if ($pageNumber > $allowpages) echo '<a class="arrow" href="' .  $pattern . 'page=' . ($firstPage - $allowpages)  . '">&larr;</a>';
				for ($i = $firstPage;$i < $firstPage + $allowpages; $i++) {
					if ($i <= $pagesNumber) {
						if ($i != $pageNumber) echo '<span><a href="' . $pattern . 'page=' . $i . '">' . $i . '</a>';
						else echo '<span class="active-nav-page">' . $i;
						echo '</span>';
					}
				}
			}
			else {
				$firstPage = 1;
				for ($i = 1; $i <= $allowpages; $i++) {
					if ($i <= $pagesNumber) {
						if ($i != $pageNumber) echo '<span><a href="' . $pattern . 'page=' . $i . '">' . $i . '</a>';
						else echo '<span class="active-nav-page">' . $i;
						echo '</span>';
					}
				}
			}
			if ($pageNumber != $pagesNumber && $pagesNumber >= ($firstPage + $allowpages)) echo '<a class="arrow" href="' . $pattern . 'page=' . ($firstPage + $allowpages) . '">&rarr;</a>';
		echo '</div>';
	}
}
?>